Add special functions for hard-coded characters.
authoroliskoli <oliskoli@f51c46e8-681c-474f-0cfe-069cfd0219fb>
Wed, 5 Apr 2006 17:59:22 +0000 (17:59 +0000)
committeroliskoli <oliskoli@f51c46e8-681c-474f-0cfe-069cfd0219fb>
Wed, 5 Apr 2006 17:59:22 +0000 (17:59 +0000)
gpsbabel/cet_util.c
gpsbabel/cet_util.h

index b3a07ef68f7738b8b27a5e06eaa5d85e66409c49..a208f194b7e09f16f3163ee9fe4992b18639a790 100644 (file)
@@ -904,7 +904,6 @@ cet_convert_init(const char *cs_name, const int force)
        }
 }
 
-
 /* -------------------------------------------------------------------- */
 /* %%%         complete data strings transformation                 %%% */
 /* -------------------------------------------------------------------- */
@@ -971,6 +970,7 @@ cet_convert_route_hdr(const route_head *route)
        
        rte->rte_name = cet_convert_string(route->rte_name);
        rte->rte_desc = cet_convert_string(route->rte_desc);
+       rte->rte_url = cet_convert_string(route->rte_url);
 }
 
 /* cet_convert_route_tlr: internal used within cet_convert_strings process */
@@ -1086,3 +1086,56 @@ cet_disp_character_set_names(FILE *fout)
        fprintf(fout, "We have %d builtin character sets with %d aliases!\n", c, ac);
        xfree(list);
 }
+
+/* %%% cet_fprintf / cet_vfprintf %%%
+ *
+ * - print any special hard-coded characters from inside a module - */
+
+int cet_vfprintf(FILE *stream, const cet_cs_vec_t *src_vec, const char *fmt, va_list args)
+{
+       char buff[128];
+       char *cout = buff;
+       int res, ct;
+       va_list args2;          /* vsnprintf makes args unusable for a second try */
+       
+       va_copy(args2, args);
+       ct = vsnprintf(buff, sizeof(buff), fmt, args);
+       if (ct >= (int)sizeof(buff)) {
+           cout = xmalloc(ct + 1);
+           vsnprintf(cout, ct + 1, fmt, args2);
+       }
+       va_end(args2);
+       
+       if (global_opts.charset != src_vec)
+       {
+           if (src_vec != &cet_cs_vec_utf8)
+           {
+               char *ctemp = cet_str_any_to_utf8(cout, src_vec);
+               if (cout != buff) xfree(cout);
+               cout = ctemp;
+           }
+           if (global_opts.charset != &cet_cs_vec_utf8)
+           {
+               char *ctemp = cet_str_utf8_to_any(cout, global_opts.charset);
+               if (cout != buff) xfree(cout);
+               cout = ctemp;
+           }
+       }
+
+       res = fprintf(stream, "%s", cout);
+       if (cout != buff) xfree(cout);
+       
+       return res;
+}
+
+int cet_fprintf(FILE *stream, const cet_cs_vec_t *src_vec, const char *fmt, ...)
+{
+       int res;
+       va_list args;
+       
+       va_start(args, fmt);
+       res = cet_vfprintf(stream, src_vec, fmt, args);
+       va_end(args);
+       
+       return res;
+}
index e1c2aac4fc6f27e1331649d1460a1867b658660c..402f7641249ebb4393eba114087f03dc0929e972 100644 (file)
@@ -96,6 +96,9 @@ char *cet_str_uni_to_any(const short *src, int length, const cet_cs_vec_t *dest_
 char *cet_str_any_to_any(const char *src, const cet_cs_vec_t *src_vec, const cet_cs_vec_t *dest_vec);
 int cet_valid_char(const char *src, const cet_cs_vec_t *vec);
 
+int cet_vfprintf(FILE *stream, const cet_cs_vec_t *src_vec, const char *fmt, va_list args);
+int cet_fprintf(FILE *stream, const cet_cs_vec_t *src_vec, const char *fmt, ...);
+
 /* gpsbabel extensions */
 
 void cet_convert_init(const char *cs_name, const int force);